Language changes
This section enumerates the changes that have been made to Scheme since
the ``Revised3 report'' [#!R3RS!#] was published.
- Although implementations may extend Scheme, they must offer
a syntactic mode that adds no reserved words and preempts no lexical conventions
of Scheme.
- Implementations may report violations of
implementation restrictions.
- It is no longer specified whether the empty list counts as true
or as false in conditional expressions.
- The sets defined by boolean?, pair?, symbol?,
number?, char?, string?, vector?, and procedure?
are required to be disjoint.
- The variables bound by a lambda, let, letrec,
and do must not contain duplicates.
- Nested begin expressions containing definitions are treated
as a sequence of definitions.
- The eqv? procedure is no longer required to be true of any
two empty strings or two empty vectors.
- The syntax of numerical constants has been changed, and the exactness
implied by each syntax has been specified.
- The semantics of many numerical procedures have been clarified.
- Rationalize has been restricted to two arguments and its
specification clarified.
- The number->string and string->number procedures
have been changed.
- Integer->char now requires an exact integer argument.
- Variables removed: t, nil.
- Procedures removed: approximate, last-pair.
- Procedures added: list?, peek-char.
- Syntaxes made essential: case, and, or,
quasiquote.
- Procedures made essential: